package library.MainView;


import library.Service.RoleService;
import library.doMain.Vo.Result;
import library.doMain.Vo.RoleVo;
import library.doMain.dto.RoleDto;

public class RoleView {
    /**
     * 视图对象缓存数组
     */
    public static RoleVo[] cache;

    public static void show() {
        String menuChoice;
        do {
            printMenu();
            menuChoice = MainView.input.nextLine();
            switch (menuChoice) {
                case "0" -> System.out.println("已返回上级菜单！");
                case "1" -> list();
                case "2" -> create();
                case "3" -> update();
                case "4" -> delete();
                default -> System.out.println("输入非法，请输入正确的菜单编号！");
            }
        } while (!"0".equals(menuChoice));
        MainView.input.close();
    }
    public static void printMenu() {
        String menu = """
            --------------
                RBAC系统
            --------------
             | 0 返回上级 |
             | 1 角色列表 |
             | 2 创建角色 |
             | 3 更新角色 |
             | 4 删除角色 |
            --------------
            请输入选项：""";
        System.out.print(menu);
    }
    public static void printError(String message){
        System.out.println("\033[31m"+message+"\033[0m");
    }

    public static void list() {
        Result result = RoleService.list();
        cache = (RoleVo[]) result.data;
        System.out.println("ID\t角色名称\t角色数据访问范围\t");
        for (RoleVo rolevo : cache) {
            System.out.printf("%d\t%s\t%s\t\n", rolevo.id, rolevo.name, rolevo.dataScope);
        }
    }

    public static void create() {
        System.out.println("请输入角色名称:");
        String name = MainView.input.nextLine();
        System.out.println("请输入角色数据访问范围，输入的值应该为【个人、部门、全局】其中之一:");
        String dataScope = null;
        do {
            String str = MainView.input.nextLine();
            if ("个人".equals(str) || "部门".equals(str) || "全局".equals(str)) {
                dataScope = str;
            } else {
                System.out.print("输入非法，输入的值应该为【个人、部门、全局】其中之一，请输入正确的数据访问范围！");
            }
        } while (dataScope == null);
        RoleDto dto = new RoleDto(name, dataScope);
        Result result = RoleService.create(dto);
        if (!result.success) {

            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();
        }
        public static void update() {
            RoleVo role = getCacheById();

            if (role == null){
                return;
            }

            System.out.println("请输入角色名称，直接按回车表示不修改：");
            String name = MainView.input.nextLine();
            name="".equals(name)?role.name:name;
            System.out.println("请输入角色数据访问范围，输入的值应该为【个人、部门、全局】其中之一:");
            String dataScope = null;
            do{
                String str  = MainView.input.nextLine();
                if ("个人".equals(str) || "部门".equals(str) || "全局".equals(str)) {
                    dataScope = str;
                }else if("".equals(str)) {
                    dataScope = role.dataScope;
                }else{
                    System.out.print("输入非法，输入的值应该为【个人、部门、全局】其中之一，请输入正确的数据访问范围！");
                }
            }while(dataScope==null);
            RoleDto dto = new RoleDto(name, dataScope);
            Result result = RoleService.update(dto, role.id);
            if (!result.success){
                printError(result.message);
                return;
            }

            System.out.println(result.message);
            list();
        }
        public static void delete() {
            RoleVo role = getCacheById();

            if (role == null){
                return;
            }

            System.out.println("输入'Y'确认删除，输入其他则取消删除！");
            String confirm = MainView.input.nextLine();

            if ("Y".equalsIgnoreCase(confirm)){
                System.out.println("您已取消删除！");
                return;
            }

            Result result = RoleService.delete(role.id);

            if (!result.success){
                printError(result.message);
                return;
            }
            System.out.println(result.message);
            list();
        }
        public static RoleVo getCacheById() {
            System.out.println("请输入ID,ID必须是大于0的整数:");
            if (!MainView.input.hasNextInt()) {
                MainView.input.nextLine();
                printError("输入非法，请输入正确的ID！");
                return null;
            }


            int id = MainView.input.nextInt();
            MainView.input.nextLine();
            if (id < 1) {
                printError("输入非法，请输入正确的ID！");
                return null;
            }
            if (cache == null){
                Result result = RoleService.list();
                cache = (RoleVo[]) result.data;
            }
            RoleVo role = null;
            for (RoleVo item : cache) {
                if (item.id == id) {
                    System.out.println("该ID对应的数据是：");
                    System.out.printf("ID：%d，名称：%s，数据访问范围：%s\n", item.id, item.name, item.dataScope);
                    role = item;
                    break;
                }
            }
            if (role == null){
                printError("当前没有该ID对应的数据！！");
                return null;
            }

            return role;
        }
    }

